//向window添加弹窗数据
(() => {
    $('body').find('.pop').each(function () {
        window[`${$(this).attr('data-name')}`] = {};
    });
})();

//用户自己点击关闭按钮、3个提示框操作
$('body').on('click', '.pop .icon-close,.pop .icon-close-else,.msg-pop .controls button,.success-pop .controls button,.fail-pop .controls button', function () {
    $(this).closest('.pop').removeClass('show');
    if ($('.pop-bg').find('.pop.show').length === 0) {
        $('.pop-bg').removeClass('show');
    }
})
//日历插件限制日期
    .on('change', 'input.date_picker', function () {
        let today = new Date();
        if (new Date($(this).val()).getTime() > today.getTime()) {
            $(this).val(`${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`);
        }
    });

//打开某个弹窗--直接传class名字
let showPop = (str) => {
    $(`${$('.pop-bg').hasClass('show') ? '' : '.pop-bg,'}.${str}`).addClass('show');
};

//关闭某个弹窗--直接传class名字
let closePop = (str) => {
    $(`${$('.pop-bg').find('.pop.show').length > 1 ? '' : '.pop-bg,'}.${str}`).removeClass('show');
};

//弹框展示切换--直接传class名字，第一个参数当前已展示弹窗，第二个需要展示的弹窗
let exchangePop = (str1, str2) => {
    $(`.${str1}`).removeClass('show');
    $(`.${str2}`).addClass('show');
};

//提示消息--第二个参数为true时关闭别的弹窗，其余情况只弹出提示弹窗
let alertMsg = (msg, type) => {
    if (type === true) {
        $('.pop-bg').find('.pop.show').each(function () {
            $(this).removeClass('show');
        });
    }
    $('.msg-pop .content p').text(msg);
    showPop('msg-pop');
};

//成功消息--第二个参数为true时关闭别的弹窗，其余情况只弹出提示弹窗
let successMsg = (msg, type) => {
    if (type === true) {
        $('.pop-bg').find('.pop.show').each(function () {
            $(this).removeClass('show');
        });
    }
    $('.success-pop .content p').text(msg);
    showPop('success-pop');
};

//失败消息--第二个参数为true时关闭别的弹窗，其余情况只弹出提示弹窗
let failMsg = (msg, type) => {
    if (type === true) {
        $('.pop-bg').find('.pop.show').each(function () {
            $(this).removeClass('show');
        });
    }
    $('.fail-pop .content p').text(msg);
    showPop('fail-pop');
};

//页面中表单输入事件
$('.form-group .form-item').on('blur', 'input[type=text],input[type=password]', function () {
    if ($(this).attr('readonly') !== 'readonly') {
        formData[`${$(this).closest('.form-item').attr('data-name')}`] = $(this).val();
    }
});

//弹窗中表单输入事件
$('.pop .content .form-item').on('blur', 'input[type=text],input[type=password]', function () {
    if ($(this).attr('readonly') !== 'readonly') {
        window[`${$(this).closest('.pop').attr('data-name')}`][`${$(this).closest('.form-item').attr('data-name')}`] = $(this).val();
    }
});

//单选事件
$('.sel-group').on('click', 'input', function () {
    let outer = $(this).closest('.sel-group'),
        father = $(this).closest('.sel-item');
    if (outer.find('.sel-item.on')[0] !== father[0]) {
        outer.find('.sel-item.on').removeClass('on');
        father.addClass('on');
        //非vue开发只能提前定义好存储对象名
        formData[`${$(this).closest('.form-item').attr('data-name')}`] = $(this).attr('data-value');
    }
});

//清除错误提示框
$('.form-item').on('focus', 'input,button,select', function () {
    if (!$(this).closest('.form-right').hasClass('file') || this.tagName === 'BUTTON') {
        if ($(this).closest('.form-item').hasClass('error')) {
            $(this).closest('.form-item').removeClass('error');
        }
    }
});

//存放手风琴所需数据
let accordionArr = [],
    accordionArrTop = 0,
    accordionRunTime = 50;

//手风琴JS
$('.accordion').on('click', 'li .do', function () {
    let parent = $(this).closest('.accordion'),
        it = $(this).closest('li');
    if (parent.find('li.show')[0] !== undefined && parent.find('li.show')[0] !== it[0]) {
        parent.find('li.show').animate({height: accordionArrTop}, accordionRunTime, 'swing').removeClass('show')
            .find('.do i').css({
            'transition': `transform ${accordionRunTime * 6}ms linear`,
            'transform': 'rotate(0deg)'
        });
    }
    if (it.hasClass('show')) {
        it.animate({height: accordionArrTop}, accordionRunTime, 'swing').removeClass('show')
            .find('.do i').css({
            'transition': `transform ${accordionRunTime * 6}ms linear`,
            'transform': 'rotate(0deg)'
        });
    }
    else {
        it.animate({height: accordionArr[parseInt($(it).attr('data-index'))]}, accordionRunTime, 'swing').addClass('show')
            .find('.do i').css({
            'transition': `transform ${accordionRunTime * 6}ms linear`,
            'transform': 'rotate(180deg)'
        });
    }
});

//获取手风琴数据
(() => {
    let parent = $('.accordion');
    if (parent[0] !== undefined) {
        accordionArrTop = parseInt(parent.find('li').eq(0).find('.accordion-title').outerHeight(true)) + 1;
        parent.find('li').each(function (index) {
            $(this).attr('data-index', index);
            accordionArr.push(parseInt($(this).find('.accordion-body').outerHeight(true)) + accordionArrTop);
        });
        parent.find('li').eq(0).find('.do').click();
    }
})();

//所有弹窗表单提交公共方法
$('.pop .controls button.sure').on('click', function () {
    let popName = $(this).closest('.pop').attr('data-name');
    let parentMsg = window[`${$(this).closest('.pop').attr('data-name')}`],
        canSend = true;
    $(this).closest('.pop').find('.form-item').each(function () {
        if ($(this).hasClass('must')) {
            //单选按钮
            if ($(this).find('.form-right').hasClass('radio')) {
                if ($(this).find('.sel-item.on')[0] !== undefined) {
                    parentMsg[`${$(this).attr('data-name')}`] = $(this).find('.sel-item.on input').val();
                }
                else {
                    $(this).addClass('error');
                    canSend = false;
                    return false;
                }
            }
            //下拉框
            else if ($(this).find('.form-right').hasClass('sel')) {
                if ($(this).find('select').val() === '') {
                    $(this).addClass('error');
                    canSend = false;
                    return false;
                }
                else {
                    parentMsg[`${$(this).attr('data-name')}`] = $(this).find('select').val();
                }
            }
            //邮箱
            else if ($(this).find('.form-right').hasClass('email')) {
                if ($(this).find('input').val() === '') {
                    $(this).addClass('error');
                    canSend = false;
                    return false;
                }
                else {
                    let reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
                    if (reg.test($(this).find('input').val())) {
                        parentMsg[`${$(this).attr('data-name')}`] = $(this).find('input').val();
                    }
                    else {
                        alertMsg('邮箱格式不正确');
                        canSend = false;
                        return false;
                    }
                }
            }
            //手机号
            else if ($(this).find('.form-right').hasClass('phone')) {
                if($(this).find('input').length){
                    if ($(this).find('input').val() === '') {
                        $(this).addClass('error');
                        canSend = false;
                        return false;
                    }
                    else {
                        let reg = /^((1([3-5]|[7-9])[0-9]))\d{8}$/;
                        if (reg.test($(this).find('input').val())) {
                            parentMsg[`${$(this).attr('data-name')}`] = $(this).find('input').val();
                        }
                        else {
                            alertMsg('手机号格式不正确');
                            canSend = false;
                            return false;
                        }
                    }
                }
            }
            //上面添加特殊验证
            else {
                if ($(this).find('input').val() === '') {
                    $(this).addClass('error');
                    alertMsg(`${$(this).find('.form-left').text()}不能为空`);
                    canSend = false;
                    return false;
                }
                else {
                    if ($(this).attr('data-minLength') !== undefined) {
                        if ($(this).find('input').val().length < parseInt($(this).attr('data-minLength'))) {
                            alertMsg(`${$(this).find('.form-left').text()}最短${$(this).attr('data-minLength')}位`);
                            $(this).addClass('error');
                            canSend = false;
                            return false;
                        }
                    }
                    if ($(this).attr('data-maxLength') !== undefined) {
                        if ($(this).find('input').val().length > parseInt($(this).attr('data-maxLength'))) {
                            alertMsg(`${$(this).find('.form-left').text()}最长${$(this).attr('data-maxLength')}位`);
                            $(this).addClass('error');
                            canSend = false;
                            return false;
                        }
                    }
                    parentMsg[`${$(this).attr('data-name')}`] = $(this).find('input').val();
                }
            }
        }
        //非必填选项
        else {
            //单选按钮
            if ($(this).find('.form-right').hasClass('sel')) {
                if ($(this).find('.sel-item.on')[0] !== undefined) {
                    parentMsg[`${$(this).attr('data-name')}`] = $(this).find('.sel-item.on input').val();
                }
            }
            //下拉框
            else if ($(this).find('.form-right').hasClass('sel')) {
                if ($(this).find('select').val() !== '') {
                    parentMsg[`${$(this).attr('data-name')}`] = $(this).find('select').val();
                }
            }
            //邮箱
            else if ($(this).find('.form-right').hasClass('email')) {
                if ($(this).find('input').val() !== '') {
                    let reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
                    if (reg.test($(this).find('input').val())) {
                        parentMsg[`${$(this).attr('data-name')}`] = $(this).find('input').val();
                    }
                    else {
                        alertMsg('邮箱格式不正确');
                        canSend = false;
                        return false;
                    }
                }
            }
            //手机号
            else if ($(this).find('.form-right').hasClass('phone')) {
                if($(this).find('input').length){
                    if ($(this).find('input').val() !== '') {
                        let reg = /^((1([3-5]|[7-9])[0-9]))\d{8}$/;
                        if (reg.test($(this).find('input').val())) {
                            parentMsg[`${$(this).attr('data-name')}`] = $(this).find('input').val();
                        }
                        else {
                            alertMsg('手机号格式不正确');
                            canSend = false;
                            return false;
                        }
                    }
                }
            }
            //上面添加特殊验证
            else {
                if ($(this).find('input').val() !== '') {
                    if ($(this).attr('data-minLength') !== undefined) {
                        if ($(this).find('input').val().length < parseInt($(this).attr('data-minLength'))) {
                            alertMsg(`${$(this).find('.form-left').text()}最短${$(this).attr('data-minLength')}位`);
                            $(this).addClass('error');
                            canSend = false;
                            return false;
                        }
                    }
                    if ($(this).attr('data-maxLength') !== undefined) {
                        if ($(this).find('input').val().length > parseInt($(this).attr('data-maxLength'))) {
                            alertMsg(`${$(this).find('.form-left').text()}最长${$(this).attr('data-maxLength')}位`);
                            $(this).addClass('error');
                            canSend = false;
                            return false;
                        }
                    }
                    parentMsg[`${$(this).attr('data-name')}`] = $(this).find('input').val();
                }
            }
        }
    });
    if (canSend) {
        $.ajax({
            url: $(this).closest('.pop').attr('data-url'),
            type: 'POST',
            data: parentMsg,
            success(data) {
                if (data.code) {
                    switch (popName) {
                        case 'loginPopMsg':
                        case 'registerPopMsg':
                            location.reload();
                            break;
                        case 'changePhoneFirstMsg':
                            exchangePop('changPhoneFirst-pop', 'changPhoneLast-pop');
                            break;
                        case 'joinPopMsg':
                            successMsg(data['msg'], true);
                            break;
                        default:
                            location.href = data["url"];
                            break;
                    }
                } else {
                    // alert(data['msg']);
                    failMsg(data['msg']);
                }
            },
            error(data) {
                // console.log(data);
                // alert("系统繁忙，请稍后再试！");
                alertMsg("系统繁忙，请稍后再试！");
            }
        });
    }
});